React Transition Groupãšã¹ããŒããã·ã³ã䜿çšããŠãReactã¢ããªã±ãŒã·ã§ã³ã§å ç¢ãã€ä¿å®æ§ã®é«ãã¢ãã¡ãŒã·ã§ã³ç¶æ 管çãè¡ãæ¹æ³ãæ¢ããŸããè€éãªãã©ã³ãžã·ã§ã³ã®ããã®é«åºŠãªãã¯ããã¯ãåŠã³ãŸãããã
React Transition Groupãšã¹ããŒããã·ã³ïŒã¢ãã¡ãŒã·ã§ã³ç¶æ 管çããã¹ã¿ãŒãã
ã¢ãã¡ãŒã·ã§ã³ã¯ããŠã§ãã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå€§å¹ ã«åäžãããèŠèŠçãªãã£ãŒãããã¯ãæäŸããã€ã³ã¿ã©ã¯ã·ã§ã³ãããé åçã«æããããããšãã§ããŸããããããç¹ã«åçãªReactã¢ããªã±ãŒã·ã§ã³å ã§è€éãªã¢ãã¡ãŒã·ã§ã³ã®ç¶æ ã管çããããšã¯ãããã«å°é£ã«ãªãå¯èœæ§ããããŸããããã§React Transition Groupãšã¹ããŒããã·ã³ã®çµã¿åãããéåžžã«äŸ¡å€ãçºæ®ããŸãããã®èšäºã§ã¯ããããã®ããŒã«ã掻çšããŠãå ç¢ã§ä¿å®æ§ãé«ãã宣èšçãªã¢ãã¡ãŒã·ã§ã³ããžãã¯ãäœæããæ¹æ³ãæãäžããŸãã
ã³ã¢ã³ã³ã»ããã®çè§£
React Transition Groupãšã¯ïŒ
React Transition GroupïŒRTGïŒã¯ãããèªäœãã¢ãã¡ãŒã·ã§ã³ã©ã€ãã©ãªã§ã¯ãããŸããã代ããã«ãã³ã³ããŒãã³ããDOMã«åºå ¥ãããéã®ãã©ã³ãžã·ã§ã³ã管çããã®ã«åœ¹ç«ã€ã³ã³ããŒãã³ããæäŸããŸããCSSãã©ã³ãžã·ã§ã³ãCSSã¢ãã¡ãŒã·ã§ã³ããŸãã¯JavaScriptã¢ãã¡ãŒã·ã§ã³ãããªã¬ãŒããããã«äœ¿çšã§ããã©ã€ããµã€ã¯ã«ããã¯ãå ¬éããŸããããã¯ãã³ã³ããŒãã³ãã*ã©ã®ããã«*ã¢ãã¡ãŒã·ã§ã³ãããã§ã¯ãªãã*ãã€*ã¢ãã¡ãŒã·ã§ã³ãã¹ããã«çŠç¹ãåœãŠãŠããŸãã
React Transition Groupå ã®äž»èŠãªã³ã³ããŒãã³ãã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- <Transition>ïŒåäžã®åèŠçŽ ãã¢ãã¡ãŒã·ã§ã³åããããã®åºæ¬çãªæ§æèŠçŽ ã§ãã`in`ããããã£ãç£èŠããenterãexitãappearã®ãã©ã³ãžã·ã§ã³ãããªã¬ãŒããŸãã
- <CSSTransition>ïŒãã©ã³ãžã·ã§ã³ã®ãã§ãŒãºäžã«CSSã¯ã©ã¹ã远å ã»åé€ãã䟿å©ãªã³ã³ããŒãã³ãã§ããããã¯ãCSSãã©ã³ãžã·ã§ã³ãã¢ãã¡ãŒã·ã§ã³ãçµ±åããæãç°¡åãªæ¹æ³ã§ããããšãå€ãã§ãã
- <TransitionGroup>ïŒ<Transition>ãŸãã¯<CSSTransition>ã³ã³ããŒãã³ãã®ã»ããã管çããŸããã¢ã€ãã ã®ãªã¹ããã«ãŒãããŸãã¯ãã®ä»ã®ã³ã³ããŒãã³ãã®ã³ã¬ã¯ã·ã§ã³ãã¢ãã¡ãŒã·ã§ã³åããã®ã«äŸ¿å©ã§ãã
ã¹ããŒããã·ã³ãšã¯ïŒ
ã¹ããŒããã·ã³ã¯ãã·ã¹ãã ã®æ¯ãèããèšè¿°ããèšç®ã®æ°åŠçã¢ãã«ã§ããæéåã®ç¶æ ããããã®ç¶æ éã®é·ç§»ãããªã¬ãŒããã€ãã³ããããã³ãããã®é·ç§»äžã«çºçããã¢ã¯ã·ã§ã³ãå®çŸ©ããŸããã¹ããŒããã·ã³ã䜿çšããããšã§ãè€éãªããžãã¯ã«äºæž¬å¯èœæ§ãšæç¢ºãããããããŸãã
ã¹ããŒããã·ã³ã䜿çšããå©ç¹ã¯æ¬¡ã®ãšããã§ãïŒ
- ã³ãŒãæ§æã®æ¹åïŒã¹ããŒããã·ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ããžãã¯ã管çããããã®æ§é åãããã¢ãããŒãã匷å¶ããŸãã
- äºæž¬å¯èœæ§ã®åäžïŒç¶æ é·ç§»ãæç€ºçã«å®çŸ©ããããããã¢ããªã±ãŒã·ã§ã³ã®æ¯ãèããããäºæž¬å¯èœã«ãªãããããã°ã容æã«ãªããŸãã
- ãã¹ãå®¹ææ§ã®åäžïŒåç¶æ ãšé·ç§»ãç¬ç«ããŠãã¹ãã§ãããããã¹ããŒããã·ã³ã¯åäœãã¹ãã«é©ããŠããŸãã
- è€éãã®è»œæžïŒè€éãªããžãã¯ãããå°ãã管çããããç¶æ ã«åè§£ããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®å šäœçãªèšèšãç°¡çŽ åã§ããŸãã
JavaScriptã§äººæ°ã®ããã¹ããŒããã·ã³ã©ã€ãã©ãªã«ã¯ãXStateãRobotãMachina.jsãªã©ããããŸãããã®èšäºã§ã¯ãããŸããŸãªã©ã€ãã©ãªã«é©çšã§ããäžè¬çãªååã«çŠç¹ãåœãŠãŸãããäŸã¯ãã®è¡šçŸåãšæ©èœã®ããã«XStateã«åŸããããããŸããã
React Transition Groupãšã¹ããŒããã·ã³ã®çµã¿åãã
ãã®åã¯ãReact Transition Groupãã¹ããŒããã·ã³ã§é£æºãããããšããçãŸããŸããã¹ããŒããã·ã³ãã¢ãã¡ãŒã·ã§ã³ã®å šäœçãªç¶æ ã管çããReact Transition GroupãçŸåšã®ç¶æ ã«åºã¥ããŠå®éã®èŠèŠçãªãã©ã³ãžã·ã§ã³ãåŠçããŸãã
ãŠãŒã¹ã±ãŒã¹ïŒè€éãªãã©ã³ãžã·ã§ã³ãæã€ã¢ãŒãã«ãŠã£ã³ããŠ
次ã®ãããªããŸããŸãªãã©ã³ãžã·ã§ã³ç¶æ ããµããŒãããã¢ãŒãã«ãŠã£ã³ããŠãèããŠã¿ãŸãããïŒ
- EnteringïŒã¢ãŒãã«ã衚瀺ãããã¢ãã¡ãŒã·ã§ã³äžã§ãã
- EnteredïŒã¢ãŒãã«ãå®å šã«è¡šç€ºãããŠããŸãã
- ExitingïŒã¢ãŒãã«ãé衚瀺ã«ãªãã¢ãã¡ãŒã·ã§ã³äžã§ãã
- ExitedïŒã¢ãŒãã«ã¯é衚瀺ã§ãã
次ã®ãããªç¶æ ãå°å ¥ããããšã§ãããã«è€éããå ããããšãã§ããŸãïŒ
- LoadingïŒã¢ãŒãã«ã衚瀺åã«ããŒã¿ãååŸäžã§ãã
- ErrorïŒããŒã¿ã®èªã¿èŸŒã¿äžã«ãšã©ãŒãçºçããŸããã
ãããã®ç¶æ ãåçŽãªããŒãªã¢ã³ãã©ã°ã§ç®¡çãããšãããã«æã«è² ããªããªããŸããã¹ããŒããã·ã³ã¯ãã¯ããã«ã¯ãªãŒã³ãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã
XStateã«ããå®è£ äŸ
以äžã¯XStateã䜿çšããåºæ¬çãªäŸã§ãïŒ
```javascript import React, { useRef } from 'react'; import { useMachine } from '@xstate/react'; import { createMachine } from 'xstate'; import { CSSTransition } from 'react-transition-group'; import './Modal.css'; // CSSãã¡ã€ã«ãã€ã³ããŒã const modalMachine = createMachine({ id: 'modal', initial: 'hidden', states: { hidden: { on: { OPEN: 'entering', }, }, entering: { entry: 'logEntering', after: { 300: 'visible', // å¿ èŠã«å¿ããŠæç¶æéãèª¿æŽ }, }, visible: { on: { CLOSE: 'exiting', }, }, exiting: { entry: 'logExiting', after: { 300: 'hidden', // å¿ èŠã«å¿ããŠæç¶æéãèª¿æŽ }, }, }, actions: { logEntering: () => console.log('Entering modal...'), logExiting: () => console.log('Exiting modal...'), } }); function Modal({ children }) { const [state, send] = useMachine(modalMachine); const nodeRef = useRef(null); const isOpen = state.matches('visible') || state.matches('entering'); return ( <>説æïŒ
- ã¹ããŒããã·ã³ã®å®çŸ©ïŒ`modalMachine`ã¯ç¶æ ïŒ`hidden`, `entering`, `visible`, `exiting`ïŒãšãããã®éã®é·ç§»ïŒ`OPEN`ããã³`CLOSE`ã€ãã³ãã«ãã£ãŠããªã¬ãŒãããïŒãå®çŸ©ããŸãã`after`ããããã£ã¯ã`entering` -> `visible`ããã³`exiting` -> `hidden`ã®éã§èªåçã«é·ç§»ããããã«é å»¶ã䜿çšããŸãã
- Reactã³ã³ããŒãã³ãïŒ`Modal`ã³ã³ããŒãã³ãã¯ã`@xstate/react`ã®`useMachine`ããã¯ã䜿çšããŠã¹ããŒããã·ã³ã管çããŸãã
- React Transition GroupïŒ`CSSTransition`ã³ã³ããŒãã³ãã¯ã`isOpen`ããŒãªã¢ã³ïŒã¹ããŒããã·ã³ã®çŸåšã®ç¶æ ããæŽŸçïŒãç£èŠããŸããCSSãã©ã³ãžã·ã§ã³ãããªã¬ãŒããããã«CSSã¯ã©ã¹ïŒ`modal-enter`, `modal-enter-active`, `modal-exit`, `modal-exit-active`ïŒãé©çšããŸãã
- CSSãã©ã³ãžã·ã§ã³ïŒCSSã¯`opacity`ããããã£ãš`transition`ããããã£ã䜿çšããŠå®éã®ã¢ãã¡ãŒã·ã§ã³ãå®çŸ©ããŸãã
ãã®ã¢ãããŒãã®å©ç¹
- é¢å¿ã®åé¢ïŒã¹ããŒããã·ã³ãã¢ãã¡ãŒã·ã§ã³ããžãã¯ã管çããReact Transition GroupãèŠèŠçãªãã©ã³ãžã·ã§ã³ãåŠçããŸãã
- 宣èšçãªã³ãŒãïŒã¹ããŒããã·ã³ãç®çã®ç¶æ ãšé·ç§»ãå®çŸ©ãããããã³ãŒããçè§£ãããããä¿å®ãããããªããŸãã
- ãã¹ãå®¹ææ§ïŒã¹ããŒããã·ã³ã¯ç¬ç«ããŠç°¡åã«ãã¹ãã§ããŸãã
- æè»æ§ïŒãã®ã¢ãããŒãã¯ãããè€éãªã¢ãã¡ãŒã·ã§ã³ãã€ã³ã¿ã©ã¯ã·ã§ã³ãåŠçããããã«æ¡åŒµã§ããŸãã
é«åºŠãªãã¯ããã¯
ç¶æ ã«åºã¥ãåçãªãã©ã³ãžã·ã§ã³
çŸåšã®ç¶æ ã«åºã¥ããŠãã©ã³ãžã·ã§ã³ãã«ã¹ã¿ãã€ãºã§ããŸããããšãã°ãã¢ãŒãã«ã®è¡šç€ºãšé衚瀺ã§ç°ãªãã¢ãã¡ãŒã·ã§ã³ã䜿çšãããå ŽåããããŸãã
```javascript const modalMachine = createMachine({ id: 'modal', initial: 'hidden', context: { animationType: 'fade', }, states: { hidden: { on: { OPEN_FADE: { target: 'entering', actions: assign({ animationType: 'fade' }), }, OPEN_SLIDE: { target: 'entering', actions: assign({ animationType: 'slide' }), }, }, }, entering: { entry: 'logEntering', after: { 300: 'visible', // å¿ èŠã«å¿ããŠæç¶æéãèª¿æŽ }, }, visible: { on: { CLOSE: 'exiting', }, }, exiting: { entry: 'logExiting', after: { 300: 'hidden', // å¿ èŠã«å¿ããŠæç¶æéãèª¿æŽ }, }, }, actions: { logEntering: () => console.log('Entering modal...'), logExiting: () => console.log('Exiting modal...'), } }); function Modal({ children }) { const [state, send] = useMachine(modalMachine); const nodeRef = useRef(null); const isOpen = state.matches('visible') || state.matches('entering'); const animationType = state.context.animationType; let classNames = `modal ${animationType}` return ( <>ãã®äŸã§ã¯ã`animationType`ã¯ã¹ããŒããã·ã³ã®ã³ã³ããã¹ãã«ä¿åãããŸãã`OPEN_FADE`ããã³`OPEN_SLIDE`ã€ãã³ãããã®ã³ã³ããã¹ããæŽæ°ãã`Modal`ã³ã³ããŒãã³ãã¯ãã®å€ã䜿çšããŠ`CSSTransition`ã³ã³ããŒãã³ãã®`classNames`ããããã£ãåçã«æ§ç¯ããŸãã
TransitionGroupã§ãªã¹ããã¢ãã¡ãŒã·ã§ã³åãã
React Transition Groupã®`TransitionGroup`ã³ã³ããŒãã³ãã¯ãã¢ã€ãã ã®ãªã¹ããã¢ãã¡ãŒã·ã§ã³åããã®ã«æé©ã§ãããªã¹ãå ã®åã¢ã€ãã ã¯`CSSTransition`ã³ã³ããŒãã³ãã§ã©ããã§ãã`TransitionGroup`ãenterããã³exitã¢ãã¡ãŒã·ã§ã³ã管çããŸãã
```javascript import React, { useState, useRef } from 'react'; import { TransitionGroup, CSSTransition } from 'react-transition-group'; import './List.css'; function List() { const [items, setItems] = useState(['Item 1', 'Item 2', 'Item 3']); const addItem = () => { setItems([...items, `Item ${items.length + 1}`]); }; const removeItem = (index) => { setItems(items.filter((_, i) => i !== index)); }; return (éèŠãªãã€ã³ãïŒ
- åãªã¹ãã¢ã€ãã ã¯`CSSTransition`ã§ã©ãããããŠããŸãã
- `CSSTransition`ã®`key`ããããã£ã¯ãReactãã©ã®ã¢ã€ãã ã远å ãŸãã¯åé€ãããŠããããèå¥ããããã«äžå¯æ¬ ã§ãã
- `TransitionGroup`ã¯ããã¹ãŠã®å`CSSTransition`ã³ã³ããŒãã³ãã®ãã©ã³ãžã·ã§ã³ã管çããŸãã
JavaScriptã¢ãã¡ãŒã·ã§ã³ã®äœ¿çš
CSSãã©ã³ãžã·ã§ã³ã¯ã³ã³ããŒãã³ããã¢ãã¡ãŒã·ã§ã³åããæãç°¡åãªæ¹æ³ã§ããããšãå€ãã§ãããããè€éãªå¹æã®ããã«ã¯JavaScriptã¢ãã¡ãŒã·ã§ã³ã䜿çšããããšãã§ããŸããReact Transition Groupã¯ãGreenSockïŒGSAPïŒãAnime.jsãªã©ã®ã©ã€ãã©ãªã䜿çšããŠJavaScriptã¢ãã¡ãŒã·ã§ã³ãããªã¬ãŒã§ããã©ã€ããµã€ã¯ã«ããã¯ãæäŸããŸãã
`classNames`ã®ä»£ããã«ã`Transition`ã³ã³ããŒãã³ãã®`onEnter`ã`onEntering`ã`onEntered`ã`onExit`ã`onExiting`ãããã³`onExited`ããããã£ã䜿çšããŠã¢ãã¡ãŒã·ã§ã³ãå¶åŸ¡ããŸãã
ã°ããŒãã«éçºã®ããã®ãã¹ããã©ã¯ãã£ã¹
ã°ããŒãã«ãªã³ã³ããã¹ãã§ã¢ãã¡ãŒã·ã§ã³ãå®è£ ããå Žåãã¢ã¯ã»ã·ããªãã£ãããã©ãŒãã³ã¹ãæåçãªé æ ®ãªã©ã®èŠå ãèæ ®ããããšãéèŠã§ãã
ã¢ã¯ã»ã·ããªãã£
- ãŠãŒã¶ãŒã®å¥œã¿ãå°éããïŒãŠãŒã¶ãŒã奜ãå ŽåïŒäŸïŒ`prefers-reduced-motion`ã¡ãã£ã¢ã¯ãšãªã䜿çšïŒãã¢ãã¡ãŒã·ã§ã³ãç¡å¹ã«ã§ããããã«ããŸãã
- ä»£æ¿ææ®µãæäŸããïŒã¢ãã¡ãŒã·ã§ã³ãç¡å¹ã«ãªã£ãŠããŠãããã¹ãŠã®éèŠãªæ å ±ãäŒããããã«ããŸãã
- ç¹çްãªã¢ãã¡ãŒã·ã§ã³ã䜿çšããïŒé床ã§éªéã«ãªãã¢ãã¡ãŒã·ã§ã³ããä¹ãç©é ããåŒãèµ·ããå¯èœæ§ã®ããã¢ãã¡ãŒã·ã§ã³ã¯é¿ããŸãã
- ããŒããŒãããã²ãŒã·ã§ã³ïŒãã¹ãŠã®ã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ãããŒããŒãããã²ãŒã·ã§ã³ã§ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
ããã©ãŒãã³ã¹
- ã¢ãã¡ãŒã·ã§ã³ã®æé©åïŒã¹ã ãŒãºãªã¢ãã¡ãŒã·ã§ã³ã®ããã«CSSã®transformãšopacityã䜿çšããŸãã`width`ã`height`ãªã©ã®ã¬ã€ã¢ãŠãããããã£ã®ã¢ãã¡ãŒã·ã§ã³åã¯é¿ããŸãã
- ãããŠã³ã¹ãšã¹ãããã«ïŒãŠãŒã¶ãŒå ¥åã«ãã£ãŠããªã¬ãŒãããã¢ãã¡ãŒã·ã§ã³ã®é »åºŠãå¶éããŸãã
- ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã䜿çšããïŒã¢ãã¡ãŒã·ã§ã³ããã©ãŠã¶ã«ãã£ãŠããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãããããã«ããŸãã
æåçãªé æ ®
- ã¹ãã¬ãªã¿ã€ããé¿ããïŒã¢ãã¡ãŒã·ã§ã³ã䜿çšããéã¯ãæåçãªã¹ãã¬ãªã¿ã€ãã«æ³šæããŸãã
- å æ¬çãªç»åã䜿çšããïŒå€æ§ãªãªãŒãã£ãšã³ã¹ã代衚ããç»åãéžæããŸãã
- ç°ãªãèšèªãèæ ®ããïŒã¢ãã¡ãŒã·ã§ã³ãç°ãªãèšèªãæžåæ¹åïŒäŸïŒå³ããå·Šãžã®èšèªïŒã§æ£ããæ©èœããããšã確èªããŸãã
ããããèœãšã穎ãšè§£æ±ºç
ã¢ãã¡ãŒã·ã§ã³ãããªã¬ãŒãããªã
åé¡ïŒã³ã³ããŒãã³ãã衚瀺ãŸãã¯é衚瀺ã«ãªããšãã«ã¢ãã¡ãŒã·ã§ã³ãéå§ããŸããã
解決çïŒ
- ã¯ã©ã¹åã確èªããïŒ`CSSTransition`ã®`classNames`ããããã£ã§äœ¿çšãããŠããCSSã¯ã©ã¹åããCSSãã¡ã€ã«ã§å®çŸ©ãããŠããã¯ã©ã¹åãšäžèŽããããšã確èªããŸãã
- ã¿ã€ã ã¢ãŠãã確èªããïŒ`timeout`ããããã£ãã¢ãã¡ãŒã·ã§ã³ãå®äºããã®ã«ååãªé·ãã§ããããšã確èªããŸãã
- DOMãæ€æ»ããïŒãã©ãŠã¶ã®éçºè ããŒã«ã䜿çšããŠDOMãæ€æ»ããæ£ããCSSã¯ã©ã¹ãé©çšãããŠããããšã確èªããŸãã
- ãªã¹ãã§ã®Keyããããã£ã®åé¡ãªã¹ããã¢ãã¡ãŒã·ã§ã³åããéãTransitionãŸãã¯CSSTransitionã³ã³ããŒãã³ãã®'key'ããããã£ãæ¬ èœããŠããããäžæã§ãªãããšãåå ã§åé¡ãçºçããããšããããããŸããããŒããªã¹ãå ã®åã¢ã€ãã ã«å¯ŸããŠå®å®ããäžæã®èå¥åã«åºã¥ããŠããããšã確èªããŠãã ããã
ã¢ãã¡ãŒã·ã§ã³ãã«ã¯ã«ã¯ããããŸãã¯é å»¶ãã
åé¡ïŒã¢ãã¡ãŒã·ã§ã³ãæ»ããã§ãªããã«ã¯ã«ã¯ãããé å»¶ãããããããã«èŠããŸãã
解決çïŒ
- CSSãæé©åããïŒããæ»ãããªã¢ãã¡ãŒã·ã§ã³ã®ããã«CSSã®transformãšopacityã䜿çšããŸããã¬ã€ã¢ãŠãããããã£ã®ã¢ãã¡ãŒã·ã§ã³åã¯é¿ããŸãã
- ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ïŒã¢ãã¡ãŒã·ã§ã³ãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãããããã«ããŸãã
- DOMã®æŽæ°ãæžããïŒã¢ãã¡ãŒã·ã§ã³äžã®DOMæŽæ°ã®æ°ãæå°éã«æããŸãã
ã³ã³ããŒãã³ããã¢ã³ããŠã³ããããªã
åé¡ïŒexitã¢ãã¡ãŒã·ã§ã³ãå®äºããåŸãã³ã³ããŒãã³ããã¢ã³ããŠã³ããããŸããã
解決çïŒ
- `unmountOnExit`ã䜿çšããïŒexitã¢ãã¡ãŒã·ã§ã³ã®åŸã«ã³ã³ããŒãã³ããã¢ã³ããŠã³ããããããã«ã`CSSTransition`ã®`unmountOnExit`ããããã£ã`true`ã«èšå®ããŸãã
- ã¹ããŒããã·ã³ã®ããžãã¯ã確èªããïŒã¢ãã¡ãŒã·ã§ã³ãå®äºããåŸãã¹ããŒããã·ã³ãæ£ãã`hidden`ãŸãã¯`exited`ç¶æ ã«é·ç§»ããŠããããšã確èªããŸãã
çµè«
React Transition Groupãšã¹ããŒããã·ã³ãçµã¿åãããããšã¯ãReactã¢ããªã±ãŒã·ã§ã³ã«ãããã¢ãã¡ãŒã·ã§ã³ç¶æ 管çã®ããã®åŒ·åã§ä¿å®æ§ã®é«ãã¢ãããŒããæäŸããŸããé¢å¿ãåé¢ãã宣èšçãªã³ãŒãã䜿çšãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãã¢ããªã±ãŒã·ã§ã³ã®äœ¿ãããããšé åãé«ãããé åçã§ã¢ã¯ã»ã¹ãããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœæã§ããŸããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«ã¢ãã¡ãŒã·ã§ã³ãå®è£ ããéã¯ãã¢ã¯ã»ã·ããªãã£ãããã©ãŒãã³ã¹ãæåçãªé æ ®ãå¿ããªãã§ãã ããã
ãããã®ãã¯ããã¯ããã¹ã¿ãŒããããšã§ãæãè€éãªã¢ãã¡ãŒã·ã§ã³ã·ããªãªã«ã察å¿ããçã«å°è±¡çãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãäœæããããã®æºåãæŽããŸãã